package top.kaoshanji.p2ch15b;

/**
 * 代码清单-p2ch15b-461页a：协作对象
 * author kaoshanji
 * ^_^
 * create time 2025/2/24 18:30
 */
public class AssemblePoint {

    // 集合点的数量
    private int n;

    public AssemblePoint(int n) {
        this.n = n;
    }

    public synchronized void await() throws InterruptedException {
        if (n > 0) { // n 大于 0 这个条件好像没有什么意义，只是确保这个值是个 正整数
            n--; // 每个线程到达就会减掉待集合的数量
            if (n == 0) { // 说明全部的线程都已经到达集合点了
                notifyAll();
            } else {
                // 这是经典写法...需要重新判断条件
                while (n != 0) { // 大于 0 又 不等于0 说明还有线程未到达
                    wait();
                }
            }
        }
    }

}
